The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 014
MANIFEST 05
META.yml 22
Makefile.PL 22
lib/MojoMojo/Controller/Jsrpc.pm 35
lib/MojoMojo/Controller/Page.pm 11
lib/MojoMojo/Formatter/GoogleCalendar.pm 083
lib/MojoMojo/Formatter/IDLink.pm 0117
lib/MojoMojo/I18N/ko.po 02026
lib/MojoMojo/Schema/Result/Page.pm 83167
lib/MojoMojo.pm 11
script/util/bust_cache.pl 085
script/util/dump_content.pl 33
script/util/import_content.pl 33
t/formatter_idlink.t 064
15 files changed (This is a version diff) 982578
@@ -1,4 +1,18 @@
+1.03  2011-01-12 11:36
+  New features:
+  - Google Calendar formatter
+
+  Bug fixes:
+  - Really fix tagged descendants by date for postgres
+  
+  Improvements:
+  - Korean Translation <JEEN>
+  - popular account link formatter via {{id:$service $account_name}} <bayashi>
+    e.g. {{id::cpan bayashi}} gets rendered as <a href="http://search.cpan.org/~bayashi/">bayashi</a>
+  - Show tags only once for 'Popular' and 'My' categories
 
+  
+1.02 2010-08-30 04:20
   Bug fixes: 
   - Fix tagged descendants by date for postgresql
   - Fix root setting to actually be used.
@@ -45,7 +45,9 @@ lib/MojoMojo/Formatter/File/DocBook.pm
 lib/MojoMojo/Formatter/File/Image.pm
 lib/MojoMojo/Formatter/File/Pod.pm
 lib/MojoMojo/Formatter/File/Text.pm
+lib/MojoMojo/Formatter/GoogleCalendar.pm
 lib/MojoMojo/Formatter/GoogleSearch.pm
+lib/MojoMojo/Formatter/IDLink.pm
 lib/MojoMojo/Formatter/Include.pm
 lib/MojoMojo/Formatter/IRCLog.pm
 lib/MojoMojo/Formatter/Main.pm
@@ -75,6 +77,7 @@ lib/MojoMojo/I18N/it.js.po
 lib/MojoMojo/I18N/it.po
 lib/MojoMojo/I18N/ja.js.po
 lib/MojoMojo/I18N/ja.po
+lib/MojoMojo/I18N/ko.po
 lib/MojoMojo/I18N/no.js.po
 lib/MojoMojo/I18N/no.po
 lib/MojoMojo/I18N/pl.js.po
@@ -436,6 +439,7 @@ script/mojomojo_spawn_db.pl
 script/mojomojo_test.pl
 script/mojomojo_update_db.pl
 script/update_po.sh
+script/util/bust_cache.pl
 script/util/dbk2xhtml.pl
 script/util/delete_page.pl
 script/util/dir2mojomojo.pl
@@ -478,6 +482,7 @@ t/formatter_dir.t
 t/formatter_docbook.t
 t/formatter_file.t
 t/formatter_googlesearch.t
+t/formatter_idlink.t
 t/formatter_include.t
 t/formatter_irclog.t
 t/formatter_markdown.t
@@ -3,7 +3,7 @@ abstract: 'A Catalyst & DBIx::Class powered Wiki.'
 author:
   - 'Marcus Ramberg C<marcus@nordaaker.com>'
 build_requires:
-  Email::Sender::Simple: 0.100110
+  Email::Sender::Simple: 0.102370
   ExtUtils::MakeMaker: 6.42
   SQL::Translator: 0.09006
   Test::Differences: 0
@@ -107,4 +107,4 @@ resources:
   homepage: http://mojomojo.org
   license: http://dev.perl.org/licenses/
   repository: http://github.com/marcusramberg/mojomojo/
-version: 1.02
+version: 1.03
@@ -12,7 +12,6 @@ requires(
     'Algorithm::Diff'              => '1.1901',
     'Algorithm::Merge'             => 0,
     'Archive::Zip'                 => '1.14',
-    'MRO::Compat'                  => '0.10',
     'Cache::FastMmap'              => 1.31,        # deleted /tmp/sharefile-* when MM is killed
     'Catalyst'                     => '5.71001',
     'Catalyst::Action::RenderView' => '0.07',
@@ -62,6 +61,7 @@ requires(
     'KinoSearch1'                                  => '1.00',
     'Module::Pluggable::Ordered'                   => '1.4',
     'Moose'                                        => 0,
+    'MRO::Compat'                                  => '0.10',
     'Number::Format'                               => 0,
     'parent'                                       => 0,
     'Template'                                     => '2.20',
@@ -99,7 +99,7 @@ test_requires 'Test::Differences';
 
 # all tests require a database to be deployed, even though SQLT is not necessary for producton if a DB exists
 test_requires 'SQL::Translator'                => '0.09006';
-test_requires 'Email::Sender::Simple'          => '0.100110';
+test_requires 'Email::Sender::Simple'          => '0.102370';
 test_requires 'WWW::Mechanize'                 => '1.54';
 test_requires 'Test::WWW::Mechanize::Catalyst' => '0.51';
 test_requires 'WWW::Mechanize::TreeBuilder'    => '1.10000';
@@ -117,9 +117,11 @@ sub tag : Local Args(1) {
         if (
             $tag
             && !$c->model("DBIC::Tag")->search(
-                page   => $page->id,
-                person => $c->req->{user_id},
-                tag    => $tagname
+                {
+                    page   => $page->id,
+                    person => $c->req->{user_id},
+                    tag    => $tagname,
+                }
             )->next()
             )
         {
@@ -310,7 +310,7 @@ sub list : Global {
     
     
     my @backlinks_viewable =
-      $c->model("DBIC::Link")->search( to_page => $page->id );
+      $c->model("DBIC::Link")->search( {to_page => $page->id} );
     if ( $c->pref('check_permission_on_view') ) {
         my $user;
         if ( $c->user_exists() ) { $user = $c->user->obj; }
@@ -0,0 +1,83 @@
+package MojoMojo::Formatter::GoogleCalendar;
+
+#use strict;
+use parent 'MojoMojo::Formatter';
+
+#my $dependencies_installed = !$@;
+#sub module_loaded { $dependencies_installed }
+
+our $VERSION = '0.1';
+
+=head1 NAME
+
+MojoMojo::Formatter::GoogleCalendar - Embed Google Calendar
+
+=head1 DESCRIPTION
+
+Embed Goodle Calendar in wiki page {{gcal <url> <width>,<height> <alignment>}}.
+
+=head1 METHODS
+
+=head2 format_content_order
+
+Format order can be 1-99. The Google Calendar formatter runs on 20.
+
+=cut
+
+sub format_content_order { 20 }
+
+=head2 format_content
+
+Calls the formatter. Takes a ref to the content as well as the
+context object.
+
+=cut
+
+sub format_content {
+    my ( $class, $content, $c ) = @_;
+    my ( $width, $height, $align );
+    my $default_width     = 600;
+    my $default_height    = 400;
+    my $default_alignment = 'center';
+    my %alignment_style   = (
+        'center' => 'margin:auto;width:70%',
+        'right'  => 'float:right;width:70%',
+        'left'   => 'float:left;width:70%'
+    );
+    my @lines = split /\n/, $$content;
+    my $re = $class->gen_re(qr/gcal\s+(.*?)\s+(\d+),(\d+)\s+(\w+)/);
+    $$content = "";
+    $c->stash->{precompile_off} = 1;
+
+    foreach my $line (@lines) {
+        if ( $line =~ m/$re/ ) {
+            !defined($2) ? $height = $default_height : $height = $2;
+            !defined($3) ? $width  = $default_width  : $width  = $3;
+            !defined($4)
+              ? $align = $alignment_style{$default_alignment}
+              : $align = $alignment_style{$4};
+            $line =
+"<div style='$align;border:1'><iframe src='$1' height='$height' width='$width' style='border-width:0; margin-left:auto; margin-right:auto' frameborder='0' scrolling='no'></iframe></div>";
+        }
+        $$content .= $line . "\n";
+    }
+    return $content;
+
+}
+
+=head1 SEE ALSO
+
+L<MojoMojo>, L<Module::Pluggable::Ordered>, L<URI::Fetch>
+
+=head1 AUTHORS
+
+Jurnell Cockhren <jurnell.cockhren@vanderbilt.edu>
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
@@ -0,0 +1,117 @@
+package MojoMojo::Formatter::IDLink;
+use strict;
+use warnings;
+use parent qw/MojoMojo::Formatter/;
+
+=head1 NAME
+
+MojoMojo::Formatter::IDLink - Linked {{id:<service name> <word>}}
+
+=cut
+
+my $CONF = {
+    tw   => 'http://twitter.com/%s',
+    htb  => 'http://b.hatena.ne.jp/%s',
+    htd  => 'http://d.hatena.ne.jp/%s',
+    cpan => 'http://search.cpan.org/~%s/',
+    fb   => 'http://facebook.com/%s',
+};
+
+my $DEFAULT = 'tw';
+
+=head1 DESCRIPTION
+
+if you write:
+
+    {{id bayashi}}
+
+it will format like this
+
+    <a href="http://twitter.com/bayashi">bayashi</a>
+
+you can write:
+
+    {{id:cpan bayashi}}
+
+it will format like this
+
+    <a href="http://search.cpan.org/~bayashi/">bayashi</a>
+
+=head1 METHODS
+
+=head2 format_content_order
+
+The IDLink formatter has no special requirements
+in terms of the order it gets run in, so it has a priority of 10.
+
+=cut
+
+sub format_content_order { 10 }
+
+=head2 format_content
+
+Calls the formatter. Takes a ref to the content as well as the context object.
+
+=cut
+
+sub format_content {
+    my ( $class, $content, $c ) = @_;
+
+    return unless $$content;
+
+    my @lines = split /\n/, $$content;
+    $$content = '';
+
+    my $re   = $class->gen_re( qr/id(?::([^\s]+))?\s+(.+)/ );
+
+    for my $line (@lines) {
+        if ( $line =~ m/$re/ ) {
+            $line = $class->process($c, $line, $re, $1, $2);
+        }
+        $$content .= $line . "\n";
+    }
+
+}
+
+=head2 process
+
+Here the actual formatting is done.
+
+=cut
+sub process {
+    my $class = shift;
+    my ($c, $line, $re, $site, $id) = @_;
+
+    $site ||= $DEFAULT;
+
+    unless ($CONF->{$site}) {
+        my $sites = join ',', keys %{$CONF};
+        $line =~ s/$re/"IDLink: ". $c->loc('identifier is wrong.'). " use [$sites]"/e;
+        return $line;
+    }
+
+    my $url = sprintf($CONF->{$site}, $id);
+
+    $line =~ s!$re!<a href="$url">$id</a>!;
+    $c->stash->{precompile_off} = 1;
+
+    return $line;
+}
+
+
+=head1 SEE ALSO
+
+L<MojoMojo> and L<Module::Pluggable::Ordered>.
+
+=head1 AUTHORS
+
+Dai Okabayashi, L<bayashi at cpan . org>
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
@@ -0,0 +1,2026 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8    \n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: root/base/user/profile.tt:11
+msgid "(Private)"
+msgstr "(비공식)"
+
+#: root/base/user/profile.tt:16 root/base/user/profile.tt:19 root/base/user/profile.tt:22 root/base/user/profile.tt:9
+msgid "(Unknown)"
+msgstr "(알려지지않음)"
+
+#: root/base/edithelp.tt:60
+msgid "**bold** or __bold__"
+msgstr "**볼드** 또는  __볼드__"
+
+#: root/base/edithelp.tt:59
+msgid "*italic* or _italic_"
+msgstr "*이탤릭* 또는  _이탤릭_"
+
+#: root/base/edithelp.tt:154
+msgid "3 or more dashes or asterisks"
+msgstr "3개 이상의 하이픈, 또는 아스테리스크(*)"
+
+#: root/base/toolbar.tt:38 root/base/toolbar.tt:8
+msgid "<xml> and such.\\nor pure text."
+msgstr ""
+
+#: root/base/message.tt:2
+msgid "A message from our sponsors..."
+msgstr ""
+
+#: root/base/header.tt:21 root/base/header.tt:23 root/base/page/atom.tt:3 root/base/page/atom.tt:6
+msgid "A poorly configured MojoMojo Installation"
+msgstr ""
+
+#: root/base/page/recent.tt:41
+msgid "Actions"
+msgstr "액션"
+
+#: root/base/admin/role.tt:16 root/base/admin/user.tt:8
+msgid "Active"
+msgstr "유효"
+
+#: root/base/page/info.tt:12
+msgid "Active version"
+msgstr ""
+
+#: root/base/admin/role_form.tt:9
+msgid "Active?"
+msgstr ""
+
+#: root/base/page/addtags.tt:6
+msgid "Add"
+msgstr "추가"
+
+#: root/base/page/addtags.tt:1
+msgid "Add tag"
+msgstr "태그추가"
+
+#: root/base/page/view.tt:25
+msgid "Added"
+msgstr ""
+
+#: root/base/user/profile.tt:15
+msgid "Age"
+msgstr "나이"
+
+#: root/base/page/list.tt:16 root/base/tag/list.tt:5
+msgid "All Pages"
+msgstr "모든 페이지"
+
+#. (page.path)
+#: root/base/page/list.tt:1
+msgid "All Pages in x"
+msgstr "「%1」아래의 모든 페이지"
+
+#. (page.name)
+#: root/base/page/list.tt:17
+msgid "All pages in x listed alphabetically"
+msgstr "「%1」아래의 모든 페이지(알파벳순)"
+
+#. (activetag)
+#: root/base/tag/list.tt:21
+msgid "All pages tagged with x listed alphabetically"
+msgstr "All pages tagged with %1 listed alphabetically"
+
+#: root/base/tag/cloud.tt:9
+msgid "All tags"
+msgstr ""
+
+#: root/base/navbar.tt:40 root/base/navbar.tt:45
+msgid "All tags in this path"
+msgstr ""
+
+#: root/base/navbar.tt:43
+msgid "All tags on photos"
+msgstr ""
+
+#: root/base/edithelp.tt:26
+msgid "Allow comments on this page."
+msgstr ""
+
+#: root/base/navbar.tt:32 root/base/navbar.tt:34
+msgid "Alphabetically sorted list of pages"
+msgstr ""
+
+#: root/base/toolbar.tt:2
+msgid "Also try h2,h3 and so on"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:255
+msgid "An error occourred. Sorry."
+msgstr ""
+
+#: root/base/edithelp.tt:131
+msgid "An h2 tag in a blockquote"
+msgstr ""
+
+#: root/base/edithelp.tt:134
+msgid "An unordered list"
+msgstr ""
+
+#: root/base/edithelp.tt:133
+msgid "And additional Markdown formatting"
+msgstr ""
+
+#: root/base/edithelp.tt:31
+msgid "And others."
+msgstr ""
+
+#:
+msgid "Anonymous User (blank to disable)"
+msgstr "이름없는 유저(공백을 넣으면 무효가 됩니다)"
+
+#: root/base/gallery/photo_info.tt:8
+msgid "Aperture"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Attachment.pm:107
+msgid "Attachment not found."
+msgstr "첨부파일을 찾을 수 없습니다."
+
+#: root/base/page/editbar.tt:13 root/base/page/editbar.tt:18 root/base/page/editbar.tt:6 root/base/page/info.tt:30
+msgid "Attachments"
+msgstr "첨부파일"
+
+#: root/base/navbar.tt:48 root/base/navbar.tt:50
+msgid "Authors"
+msgstr "멤버"
+
+#: root/base/page/bottomnav.tt:24 root/base/page/bottomnav.tt:35
+msgid "Back in time"
+msgstr "과거의 상태"
+
+#: root/base/page/bottomnav.tt:38
+msgid "Back to the page"
+msgstr "페이지로 돌아가기"
+
+#: root/base/page/list.tt:27
+msgid "Backlinks"
+msgstr "링크"
+
+#:
+msgid "Birth Date"
+msgstr "생일"
+
+#: root/base/edithelp.tt:127
+msgid "Block quotes"
+msgstr "블록인용"
+
+#: root/base/edithelp.tt:130
+msgid "Blockquotes can be nested"
+msgstr ""
+
+#: root/base/toolbar.tt:19 root/base/toolbar.tt:41
+msgid "Bold"
+msgstr ""
+
+#: root/base/toolbar.tt:35 root/base/toolbar.tt:5
+msgid "Bullet list"
+msgstr ""
+
+#: root/base/edithelp.tt:25
+msgid "Bulleted list"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:5
+msgid "Camera"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Attachment.pm:169
+msgid "Can only make inline version of photos"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Attachment.pm:150
+msgid "Can only make thumbnails of photos"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:114
+msgid "Cannot find that user."
+msgstr ""
+
+#: lib/MojoMojo/Controller/Admin.pm:66
+msgid "Cant find admin user: "
+msgstr ""
+
+#: root/base/toolbar.tt:15
+msgid "Centered paragraph"
+msgstr ""
+
+#: root/base/navbar.tt:18 root/base/page/bottomnav.tt:13
+msgid "Change page content"
+msgstr ""
+
+#: root/base/user/prefs.tt:6
+msgid "Change password"
+msgstr "패스워드 변경"
+
+#: root/base/user/profile.tt:46
+msgid "Change profile content"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:16
+msgid "Change site settings"
+msgstr ""
+
+#: root/base/page/info.tt:18
+msgid "Children"
+msgstr ""
+
+#: root/base/page/attachments.tt:14
+msgid "Choose attachments"
+msgstr ""
+
+#: root/base/edithelp.tt:121
+msgid "Circle"
+msgstr ""
+
+#: root/base/gallery/photo.tt:32
+msgid "Click for original version"
+msgstr ""
+
+#: root/base/page/suggest.tt:21
+msgid "Click on any non-existent page to create it. Any missing pages above it will be created automatically."
+msgstr ""
+
+#: root/base/edithelp.tt:137
+msgid "Code Spans"
+msgstr ""
+
+#: root/base/comment.tt:5
+msgid "Comment"
+msgstr ""
+
+#: root/forms/comment/comment.yml:17
+msgid ""
+"Comment body\n"
+"    constraints:\n"
+"      - Required\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Register\n"
+msgstr ""
+
+#: root/base/comment.tt:5
+msgid "Comments"
+msgstr ""
+
+#: root/base/page/info.tt:15
+msgid "Content size"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:52 root/base/comment/login.tt:6
+msgid "Could not authenticate that login."
+msgstr ""
+
+#. ($file)
+#: lib/MojoMojo/Controller/Attachment.pm:60
+msgid "Could not create attachment from x"
+msgstr "Could not create attachment from %1"
+
+#:
+msgid "Create"
+msgstr "작성"
+
+#: root/base/admin/create_role.tt:9
+msgid "Create Role"
+msgstr ""
+
+#: root/base/admin/role.tt:11 root/base/admin/role.tt:30
+msgid "Create a new role"
+msgstr ""
+
+#: root/base/page/edit.tt:56
+msgid "Create and View"
+msgstr ""
+
+#: root/base/edithelp.tt:155
+msgid "Creates"
+msgstr ""
+
+#: root/base/page/edit.tt:6
+msgid "Creating"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:38
+msgid "Current Revision"
+msgstr "현재 리비젼現"
+
+#:
+msgid "Current password"
+msgstr "현재 패스워드 "
+
+#: root/forms/user/password.yml:29
+msgid ""
+"Current password\n"
+"    constraints:\n"
+"        - Required\n"
+"  - type: Password\n"
+"    name: pass\n"
+"    label_loc: New password\n"
+"    constraints:\n"
+"        - Required\n"
+"  - type: Password\n"
+"    name: pass_again\n"
+"    label_loc: New password again\n"
+"    constraints:\n"
+"        - type: Equal\n"
+"          others: pass\n"
+"          message_loc: 'Password did not match'\n"
+"        - Required\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Save\n"
+msgstr ""
+
+#: root/base/user/profile.tt:33
+msgid "Date registered"
+msgstr "등록일"
+
+#: root/base/toolbar.tt:23 root/base/toolbar.tt:45
+msgid "Deleted Text"
+msgstr "삭제된 텍스트"
+
+#: root/base/page/info.tt:21
+msgid "Descendants"
+msgstr ""
+
+#: root/base/user/validate.tt:19
+msgid "Didn't receive an email?"
+msgstr "메일을 받지 못했을 경우"
+
+#: root/base/navbar.tt:56 root/base/navbar.tt:58
+msgid "Download a zip with all the pages in this wiki"
+msgstr "Wiki 내용을 ZIP형식으로 다운로드"
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:135
+msgid "END OF CONFLICT"
+msgstr ""
+
+#: root/base/admin/role.tt:23 root/base/page/editbar.tt:11 root/base/page/editbar.tt:17 root/base/page/permissions.tt:47
+msgid "Edit"
+msgstr "편집"
+
+#: root/base/navbar.tt:18
+msgid "Edit Page"
+msgstr "페이지 수정"
+
+#: root/base/user/profile.tt:46
+msgid "Edit Profile"
+msgstr "프로필 수정"
+
+#: root/base/admin/edit_role.tt:9
+msgid "Edit Role"
+msgstr "역할 수정"
+
+#: root/base/page/bottomnav.tt:16
+msgid "Edit Settings"
+msgstr "설정 변경"
+
+#: root/base/page/recent.tt:39
+msgid "Edited by"
+msgstr "편집자"
+
+#: root/base/page/edit.tt:4
+msgid "Editing"
+msgstr "「%1」를 편집중"
+
+#. (user.name)
+#: root/base/user/editprofile.tt:3
+msgid "Editing user profile for x"
+msgstr "Editing user profile for %1"
+
+#: root/base/user/profile.tt:6 root/base/user/recover_pass.tt:10 root/base/user/validate.tt:26
+msgid "Email"
+msgstr "메일주소"
+
+#: root/base/user/validate.tt:4
+msgid "Email Validation"
+msgstr "메일 주소 확인"
+
+#: lib/MojoMojo/Controller/User.pm:188
+msgid "Emailed you your new password."
+msgstr ""
+
+#: root/base/toolbar.tt:37 root/base/toolbar.tt:7
+msgid "Enum list"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:191
+msgid "Error occurred while emailing you your new password."
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:1
+msgid "Exif Data"
+msgstr ""
+
+#: root/base/page/suggest.tt:4
+msgid "Existent Pages"
+msgstr ""
+
+#: root/base/export.tt:1 root/base/navbar.tt:56 root/base/navbar.tt:58
+msgid "Export"
+msgstr "보내기"
+
+#: root/base/toolbar.tt:27 root/base/toolbar.tt:49
+msgid "External Link"
+msgstr "외부링크"
+
+#:
+msgid "Favorite Albums"
+msgstr "좋아하는 앨범"
+
+#:
+msgid "Favorite Movies"
+msgstr "좋아하는 영화"
+
+#: root/base/navbar.tt:54
+msgid "Feeds"
+msgstr "피드"
+
+#: root/base/user/validate.tt:22
+msgid "Fill in the email address you want to use here"
+msgstr "액티베이션을 보내고 싶은 메일주소를 아래에 써주세요"
+
+#: root/base/edithelp.tt:36
+msgid "Format content until next =pod as plain old documentation"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:50
+msgid "Format page for printing"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:28 root/base/page/bottomnav.tt:32
+msgid "Forward in time"
+msgstr "이 후의 상태"
+
+#: root/base/page/permissions.tt:10
+msgid "From"
+msgstr ""
+
+#: root/base/feeds.tt:6 root/base/feeds.tt:8
+msgid "Full content"
+msgstr "전체글"
+
+#: root/base/navbar.tt:72
+msgid "Gallery"
+msgstr ""
+
+#: root/base/user/profile.tt:18
+msgid "Gender"
+msgstr "성별"
+
+#: root/base/navbar.tt:28
+msgid "Get in there"
+msgstr ""
+
+#: root/base/page/search.tt:13 root/base/page/search_inline.tt:3
+msgid "Go"
+msgstr ""
+
+#: root/base/message.tt:6
+msgid "Go directly to "
+msgstr ""
+
+#: root/base/navbar.tt:21
+msgid "Go to home page"
+msgstr ""
+
+#: root/base/edithelp.tt:149
+msgid "Going back to normal formatting"
+msgstr ""
+
+#: root/base/export.tt:6
+msgid "HTML"
+msgstr ""
+
+#: root/base/mail/reset_password.tt:8
+msgid "Have a nice day"
+msgstr ""
+
+#: root/base/edithelp.tt:71 root/base/edithelp.tt:72 root/base/edithelp.tt:75 root/base/edithelp.tt:76
+msgid "Header 1"
+msgstr ""
+
+#: root/base/edithelp.tt:79 root/base/edithelp.tt:80 root/base/edithelp.tt:83 root/base/edithelp.tt:84
+msgid "Header 2"
+msgstr ""
+
+#: root/base/edithelp.tt:87 root/base/edithelp.tt:88
+msgid "Header 6"
+msgstr ""
+
+#: root/base/edithelp.tt:69
+msgid "Headers"
+msgstr ""
+
+#: root/base/feeds.tt:7
+msgid "Headlines"
+msgstr "헤드라인"
+
+#. (page.name_orig)
+#: root/base/page/rss.tt:6
+msgid "Headlines for x"
+msgstr "Headlines for %1"
+
+#: root/base/mail/reset_password.tt:1
+msgid "Hi there."
+msgstr ""
+
+#. (user.name)
+#: root/base/mail/validate.tt:1
+msgid "Hi. This is a mail to validate your email address, x. To confirm, please click the url below:"
+msgstr "Hi. This is a mail to validate your email address, %1. To confirm, please click the url below:"
+
+#: root/base/page/bottomnav.tt:46
+msgid "Hide changes"
+msgstr "변경부분을 표시하지 않음"
+
+#: root/base/page/suggest.tt:8 root/base/page/wrapper.tt:7 root/base/sidebar.tt:21
+msgid "Home"
+msgstr ""
+
+#: root/base/edithelp.tt:10 root/base/edithelp.tt:52
+msgid "HomePage, ThreeWordsTogether, [[C++]], [[Lets play again!]] ((easy to type))"
+msgstr ""
+
+#: root/base/edithelp.tt:152
+msgid "Horizontal Rules"
+msgstr ""
+
+#: root/base/gallery.tt:13
+msgid "Hover over an image to get more info."
+msgstr ""
+
+#: root/base/edithelp.tt:12 root/base/edithelp.tt:54
+msgid "IBM, School"
+msgstr ""
+
+#: root/base/admin/role.tt:16
+msgid "ID"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:7
+msgid "ISO"
+msgstr ""
+
+#: root/base/edithelp.tt:63
+msgid "IdLabel"
+msgstr ""
+
+#: root/base/page/attachments.tt:16
+msgid "If the flash uploader gives you problems, switch to the"
+msgstr "이 페이지에서는 Flash 업로더를 사용하고 있습니다. 사용하시는 환경에서 제대로 동작하지 않는 경우는 심플 업로더로 바꿔주세요."
+
+#. (link)
+#: root/base/user/validate.tt:32
+msgid "If you are unable to validate, please x"
+msgstr "확인이 되지 않는 경우는 %1"
+
+#: root/base/edithelp.tt:38
+msgid "Image"
+msgstr ""
+
+#: root/base/edithelp.tt:64
+msgid "Images"
+msgstr ""
+
+#: root/base/user/profile.tt:21
+msgid "Industry"
+msgstr "직업"
+
+#: root/base/page/permissions.tt:5
+msgid "Inherited permissions"
+msgstr ""
+
+#: root/base/edithelp.tt:66
+msgid "Inline"
+msgstr ""
+
+#: root/base/edithelp.tt:62
+msgid "Inline Links"
+msgstr ""
+
+#: root/base/user/profile.tt:24
+msgid "Interests"
+msgstr "좋아하는 것"
+
+#: root/base/toolbar.tt:25 root/base/toolbar.tt:47
+msgid "Internal Link"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:154
+msgid "Invalid password."
+msgstr ""
+
+#: root/base/toolbar.tt:21 root/base/toolbar.tt:43
+msgid "Italic"
+msgstr ""
+
+#: root/base/edithelp.tt:135
+msgid "Item"
+msgstr ""
+
+#: root/base/edithelp.tt:129
+msgid "Just like email quoting!"
+msgstr ""
+
+#: root/base/toolbar.tt:17
+msgid "Justified paragraph"
+msgstr ""
+
+#: root/base/user/profile.tt:36
+msgid "Last changes"
+msgstr "변경이력"
+
+#: root/base/edithelp.tt:63
+msgid "Later in the document"
+msgstr ""
+
+#: root/base/page/edit.tt:66
+msgid "Leave second blank if you do not want a password"
+msgstr ""
+
+#: root/base/toolbar.tt:11
+msgid "Left-justified paragraph"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:6
+msgid "Lens"
+msgstr ""
+
+#: root/base/edithelp.tt:62 root/base/edithelp.tt:63
+msgid "Link Title"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:56
+msgid "Linked from"
+msgstr ""
+
+#: root/base/edithelp.tt:61
+msgid "Links"
+msgstr ""
+
+#: root/base/page/info.tt:27
+msgid "Links from"
+msgstr ""
+
+#: root/base/page/info.tt:24
+msgid "Links to"
+msgstr ""
+
+#: root/base/page/list.tt:38
+msgid "Links to non-existent pages."
+msgstr "링크는 만들어졌지만, 아직 작성되지 않은 페이지"
+
+#. (activetag)
+#: root/base/tag/list.tt:20
+msgid "List by x"
+msgstr "List by %1"
+
+#: root/base/toolbar.tt:34 root/base/toolbar.tt:4
+msgid "List item 1"
+msgstr ""
+
+#: root/base/edithelp.tt:114
+msgid "Lists can be nested by indentation level"
+msgstr ""
+
+#: root/base/navbar.tt:28 root/base/user/login.tt:22
+msgid "Log in"
+msgstr "로그인"
+
+#: root/base/navbar.tt:26
+msgid "Log out"
+msgstr "로그아웃"
+
+#: root/base/user/login.tt:3
+msgid "Login"
+msgstr "로그인"
+
+#: root/forms/user/prefs.yml:31
+msgid ""
+"Login\n"
+"    filters:\n"
+"       - HTMLEscape\n"
+"    constraints:\n"
+"      - Required\n"
+"      - Word\n"
+"  - type: Text\n"
+"    name: name\n"
+"    label_loc: Name\n"
+"    filters:\n"
+"       - HTMLEscape\n"
+"  - type: Text\n"
+"    name: email\n"
+"    label_loc: Email\n"
+"    filters:\n"
+"       - HTMLEscape\n"
+"    constraints:\n"
+"      - Required\n"
+"      - type: Email\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Save\n"
+msgstr ""
+
+#: root/forms/user/register.yml:48
+msgid ""
+"Login\n"
+"    filters:\n"
+"      - LowerCase\n"
+"    constraints:\n"
+"      - Required\n"
+"  - type: Password\n"
+"    name: pass\n"
+"    label_loc: Password\n"
+"    constraints:\n"
+"      - Required\n"
+"      - type: Equal\n"
+"        others: confirm_password\n"
+"        message_loc: Password did not match\n"
+"      - type: Length\n"
+"        min: 4\n"
+"        max: 14\n"
+"        message_loc: Password must be between 4 and 14 chars\n"
+"  - type: Password\n"
+"    name: confirm_password\n"
+"    label_loc: Repeat password\n"
+"  - type: Text\n"
+"    name: email\n"
+"    label_loc: Email\n"
+"    filters:\n"
+"      - HTMLEscape\n"
+"    constraints:\n"
+"      - Email\n"
+"      - Required\n"
+"  - type: Text\n"
+"    name: name\n"
+"    label_loc: Name\n"
+"    filters:\n"
+"      - HTMLEscape\n"
+"    constraints:\n"
+"      - Required\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Register\n"
+msgstr ""
+
+#: root/base/toolbar.tt:3 root/base/toolbar.tt:33
+msgid "Main heading"
+msgstr ""
+
+#: root/base/page/rollback.tt:4
+msgid "Make current"
+msgstr ""
+
+#: root/base/toolbar.tt:30 root/base/toolbar.tt:52
+msgid "Mark some text to apply the toolbar actions to that text"
+msgstr "툴바에 있는 액션을 사용하기 위해서는 대상의 문자를 하이라이트해주세요"
+
+#: root/base/edithelp.tt:45
+msgid "Markdown formatting tips"
+msgstr ""
+
+#: root/base/mail/reset_password.tt:9
+msgid "MojoMojo - Spirit in a box"
+msgstr ""
+
+#: root/base/user/profile.tt:30
+msgid "Movies"
+msgstr "영화"
+
+#: root/base/user/profile.tt:27
+msgid "Music"
+msgstr "음악"
+
+#: root/base/page/tags.tt:2
+msgid "My tags"
+msgstr "나의 태그"
+
+#: root/base/admin/role.tt:16 root/base/user/profile.tt:3
+msgid "Name"
+msgstr "이름"
+
+#: root/forms/user/editprofile.yml:40
+msgid ""
+"Name\n"
+"  - type: Date\n"
+"    name: born\n"
+"    label_loc: Birth Date\n"
+"    auto_inflate: 1\n"
+"    year:\n"
+"      less: 70 \n"
+"      plus: 0\n"
+"  - type: Select\n"
+"    name: gender\n"
+"    label_loc: Gender\n"
+"    options:\n"
+"        - [ 'm', 'Male' ]\n"
+"        - [ 'f', 'Female' ]\n"
+"        - [ '?', 'Rather not say' ]\n"
+"  - type: Text\n"
+"    name: industry\n"
+"    label_loc: Industry\n"
+"  - type: Textarea\n"
+"    name: interests\n"
+"    label_loc: Interests\n"
+"  - type: Textarea\n"
+"    label_loc: Favorite Albums\n"
+"    name: music\n"
+"  - type: Textarea\n"
+"    name: movies\n"
+"    label_loc: Favorite Movies\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Update \n"
+msgstr ""
+
+#: root/base/user/profile.tt:4
+msgid "Name missing"
+msgstr ""
+
+#: root/base/edithelp.tt:139
+msgid "Nested backticks"
+msgstr ""
+
+#: root/base/user/register.tt:2
+msgid "New User Registration"
+msgstr "새로운 유저 등록"
+
+#:
+msgid "New User Registration open"
+msgstr "유저 등록 허가"
+
+#: root/base/page/search.tt:54 root/base/page/search_inline.tt:45
+msgid "Next"
+msgstr ""
+
+#: root/base/admin/role.tt:22
+msgid "No"
+msgstr ""
+
+#: root/base/comment.tt:21
+msgid "No Comments posted"
+msgstr ""
+
+#. (c.pref('main_formatter')
+#. (c.pref("main_formatter"))
+#: root/base/edithelp.tt:161
+msgid "No help yet for x"
+msgstr "No help yet for %1"
+
+#: root/base/admin/role_form.tt:25
+msgid "No members added yet."
+msgstr ""
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:39
+msgid "No permissions to edit this page"
+msgstr ""
+
+#: root/base/user/list.tt:13
+msgid "No recent changes"
+msgstr "최근의 변경은 없습니다"
+
+#: root/base/page/search.tt:24 root/base/page/search_inline.tt:15
+msgid "No results found"
+msgstr ""
+
+#: root/base/admin/role.tt:29
+msgid "No roles created yet."
+msgstr ""
+
+#. ($page->name)
+#: lib/MojoMojo/Controller/Page.pm:90
+msgid "No such revision for "
+msgstr ""
+
+#: root/base/page/suggest.tt:13
+msgid "Non-Existent Pages"
+msgstr ""
+
+#: root/base/page/permissions.tt:28
+msgid "None"
+msgstr ""
+
+#: root/base/edithelp.tt:145
+msgid "Normal Paragraph"
+msgstr ""
+
+#: root/base/page/list.tt:43
+msgid "Not found. Click to create this page."
+msgstr ""
+
+#: root/base/edithelp.tt:12 root/base/edithelp.tt:54
+msgid "Not wiki words"
+msgstr ""
+
+#: root/base/user/profile.tt:25 root/base/user/profile.tt:28 root/base/user/profile.tt:31
+msgid "Nothing entered"
+msgstr "-"
+
+#: root/base/edithelp.tt:29
+msgid "Numbered list"
+msgstr ""
+
+#: root/base/toolbar.tt:36 root/base/toolbar.tt:6
+msgid "Numbered list item"
+msgstr ""
+
+#: root/base/page/suggest.tt:3
+msgid "One or more pages in the requested path do not exist."
+msgstr ""
+
+#: root/base/edithelp.tt:67
+msgid "Optional Title"
+msgstr ""
+
+#. (link)
+#: root/base/tag/cloud.tt:10
+msgid "Or you can check out x instead"
+msgstr "혹은:%1"
+
+#: root/base/edithelp.tt:90
+msgid "Ordered Lists"
+msgstr ""
+
+#: root/base/page/list.tt:48
+msgid "Orphaned Pages"
+msgstr "링크가 없는 페이지"
+
+#: root/base/page/suggest.tt:23
+msgid "Other Suggestions"
+msgstr ""
+
+#: root/base/page/list.tt:28
+msgid "Other pages that link to this page."
+msgstr "이 페이지로 링크된 페이지"
+
+#: root/base/navbar.tt:66 root/base/navbar.tt:68 root/base/page/recent.tt:38
+msgid "Page"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:19 root/base/page/bottomnav.tt:21
+msgid "Page Info"
+msgstr "페이지정보"
+
+#. (page.path)
+#: root/base/page/info.tt:9
+msgid "Page info for x"
+msgstr "Page info for %1"
+
+#: root/base/page/bottomnav.tt:19 root/base/page/bottomnav.tt:21
+msgid "Page meta information"
+msgstr ""
+
+#: root/forms/pageadmin/edit.yml:17
+msgid ""
+"Page text\n"
+"    constraints:\n"
+"      - Required\n"
+"  - type: Text\n"
+"    name: creator\n"
+"    label_loc: creator\n"
+"  - type: Submit\n"
+"    name: submit\n"
+msgstr ""
+
+#: root/base/navbar.tt:36 root/base/navbar.tt:38
+msgid "Pages sorted by when they were last changed"
+msgstr ""
+
+#: root/base/page/list.tt:49
+msgid "Pages to which no other pages link."
+msgstr "어디에도 링크되지 않은 페이지"
+
+#: root/base/user/login.tt:19
+msgid "Password"
+msgstr "패스워드"
+
+#:
+msgid "Password did not match"
+msgstr "패스워드가 일치하지 않습니다"
+
+#:
+msgid "Password must be between 4 and 14 chars"
+msgstr "패스워드는 4~14자로 정해주세요."
+
+#. ($page->name)
+#: lib/MojoMojo/Controller/Page.pm:71
+msgid "Permission Denied to view x"
+msgstr "「%1」를 볼 권한이 없습니다"
+
+#. ([ $permtocheck, $name ])
+#: lib/MojoMojo/Controller/PageAdmin.pm:89
+msgid "Permission Denied to x x"
+msgstr "「%1 %2」 권한이 없습니다"
+
+#: root/base/page/editbar.tt:15 root/base/page/editbar.tt:19 root/base/page/editbar.tt:9
+msgid "Permissions"
+msgstr "권한"
+
+#: root/base/page/permissions.tt:33
+msgid "Permissions for this page"
+msgstr "이 페이지에 대한 권한"
+
+#: root/base/navbar.tt:74
+msgid "Photo Album"
+msgstr ""
+
+#: root/base/page/info.tt:33
+msgid "Photos"
+msgstr "사진"
+
+#: root/base/toolbar.tt:29 root/base/toolbar.tt:51
+msgid "Picture"
+msgstr "그림"
+
+#: lib/MojoMojo/Controller/User.pm:33
+msgid "Please enter username and password"
+msgstr "유저이름과 패스워드를 입력해주세요"
+
+#: lib/MojoMojo/Controller/User.pm:214
+msgid "Please fill in the following information to register. All fields are mandatory."
+msgstr ""
+
+#: root/base/page/attachments.tt:15
+msgid "Please select a file to attach to this page. To upload multiple files, put them in a zip."
+msgstr "첨부할 파일을 선택해주세요. 여러개의 파일을 첨부할 경우에는 ZIP 형식의 파일을 지정해주세요."
+
+#: lib/MojoMojo/Controller/Jsrpc.pm:33
+msgid "Please type something"
+msgstr "입력해주세요"
+
+#: root/base/page/tags.tt:15
+msgid "Popular tags"
+msgstr "인기태그"
+
+#: root/base/comment/post.tt:5
+msgid "Post"
+msgstr "글쓰기"
+
+#: root/base/footer.tt:3
+msgid "Powered by Catalyst"
+msgstr ""
+
+#: root/base/navbar.tt:88 root/base/navbar.tt:90
+msgid "Preferences"
+msgstr "설정"
+
+#: root/base/edithelp.tt:142
+msgid "Preformatted Code Blocks"
+msgstr "포맷이 정해진 코드블록"
+
+#: root/base/toolbar.tt:39 root/base/toolbar.tt:9
+msgid "Preformatted text"
+msgstr "포맷이 정해진 텍스트"
+
+#: root/base/page/editbar.tt:4
+msgid "Preview"
+msgstr "미리보기"
+
+#: root/base/page/search.tt:48 root/base/page/search_inline.tt:39
+msgid "Previous"
+msgstr "앞"
+
+#: root/base/page/bottomnav.tt:50
+msgid "Print"
+msgstr "프린트"
+
+#: root/base/navbar.tt:81 root/base/navbar.tt:83
+msgid "Profile"
+msgstr "프로필"
+
+#: root/base/export.tt:7
+msgid "Raw markup"
+msgstr "직접편집"
+
+#: root/base/navbar.tt:36 root/base/navbar.tt:38
+msgid "Recent"
+msgstr "최근 변경"
+
+#: root/base/tag/recent.tt:3
+msgid "Recent Pages"
+msgstr ""
+
+#. (page.path)
+#: root/base/page/atom.tt:10 root/base/page/rss.tt:8 root/base/page/rss_full.tt:7
+msgid "Recent changes in x"
+msgstr "Recent changes in %1"
+
+#. (page.path)
+#. (activetag)
+#: root/base/page/recent.tt:1 root/base/page/recent.tt:2 root/base/tag/list.tt:22
+msgid "Recent pages in x"
+msgstr "Recent pages in %1"
+
+#. ([page.path, activetag])
+#. ([ page.path, activetag ])
+#: root/base/page/recent.tt:1 root/base/page/recent.tt:4
+msgid "Recent pages in x tagged with x"
+msgstr "Recent pages in %1 tagged with %2"
+
+#: root/base/user/recover_pass.tt:3
+msgid "Recover Password"
+msgstr "패스워드를 재발행"
+
+#: root/base/user/login.tt:13 root/base/user/recover_pass.tt:13
+msgid "Recover password"
+msgstr "패스워드를 재발행"
+
+#: root/base/edithelp.tt:123
+msgid "Rectangle"
+msgstr ""
+
+#: root/base/navbar.tt:29
+msgid "Register"
+msgstr ""
+
+#: root/base/user/login.tt:11
+msgid "Register new account"
+msgstr "신규등록"
+
+#: lib/MojoMojo/Controller/User.pm:209
+msgid "Registration is closed!"
+msgstr "신규등록은 닫혀있습니다"
+
+#: root/base/tag/list.tt:31
+msgid "Related Tags"
+msgstr "관련태그"
+
+#: root/base/page/view.tt:25
+msgid "Removed"
+msgstr ""
+
+#:
+msgid "Restrict user editing to home directory"
+msgstr "홈디렉토리 아래의 편집만 허가"
+
+#: lib/MojoMojo/Controller/Admin.pm:30
+msgid "Restricted area. Admin access required"
+msgstr ""
+
+#: root/base/page/search.tt:46 root/base/page/search_inline.tt:37
+msgid "Result Page"
+msgstr ""
+
+#. ([pager.first, pager.last, pager.total_entries, found_within])
+#. ([ pager.first, pager.last, pager.total_entries, found_within ])
+#: root/base/page/search.tt:22 root/base/page/search_inline.tt:13
+msgid "Results x-x of x found within x"
+msgstr "Results %1-%2 of %3 found within %4"
+
+#. ([content.created.ymd, content.created.hms, content.creator.name])
+#. ([ content.created.ymd, content.created.hms, content.creator.name ])
+#: root/base/page/print.tt:15 root/base/page/view.tt:31
+msgid "Revised on x at x by x"
+msgstr "Revised on %1 at %2 by %3"
+
+#: root/base/page/print.tt:8 root/base/page/view.tt:32 root/base/page/view.tt:5
+msgid "Revision"
+msgstr "리비젼"
+
+#. (page.content.created.datetime)
+#: root/base/page/rss.tt:14
+msgid "Revision from x"
+msgstr "Revision from %1"
+
+#: root/base/toolbar.tt:13
+msgid "Right-justified paragraph"
+msgstr ""
+
+#: root/base/admin/role_form.tt:15
+msgid "Role Members"
+msgstr ""
+
+#: root/forms/admin/role_form.yml:24
+msgid ""
+"Role Name\n"
+"    constraints:\n"
+"      - Required\n"
+"  - type: Checkbox\n"
+"    name: active\n"
+"    label_loc: \"Active?\"\n"
+"  - type: Repeatable\n"
+"    increment_field_names: 0\n"
+"    elements:\n"
+"      - type: Text\n"
+"      - name: role_members\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Save\n"
+msgstr ""
+
+#: root/base/admin/role_form.tt:5
+msgid "Role Name:"
+msgstr ""
+
+#: root/base/admin/role.tt:9
+msgid "Roles"
+msgstr ""
+
+#. (page.content_version)
+#: root/base/page/view.tt:7
+msgid "Rolled Back (Current: x)"
+msgstr "Rolled Back (Current: %1)"
+
+#: root/base/admin/role_form.tt:40 root/base/page/edit.tt:55 root/base/page/permissions.tt:48
+msgid "Save"
+msgstr "저장"
+
+#: root/base/page/edit.tt:56
+msgid "Save and View"
+msgstr "저장하고 보기"
+
+#: root/base/navbar.tt:61 root/base/page/search.tt:13 root/base/page/search_inline.tt:3
+msgid "Search"
+msgstr "검색"
+
+#: root/base/page/search.tt:5
+msgid "Search Results"
+msgstr "검색결과"
+
+#: root/base/page/search.tt:14 root/base/page/search_inline.tt:4
+msgid "Search entire site"
+msgstr "전체사이트를 검색"
+
+#: root/base/admin/role_form.tt:18
+msgid "Search for users:"
+msgstr "유저를 검색"
+
+#. (page.path)
+#: root/base/page/search.tt:15 root/base/page/search_inline.tt:5
+msgid "Search within x"
+msgstr "Search within %1"
+
+#: root/base/edithelp.tt:25 root/base/edithelp.tt:29
+msgid "Second item"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:43
+msgid "See changes"
+msgstr "변경부분 보기"
+
+#: root/base/page/bottomnav.tt:28 root/base/page/bottomnav.tt:32
+msgid "See next revision"
+msgstr "다음 리비젼 보기"
+
+#: root/base/page/bottomnav.tt:24 root/base/page/bottomnav.tt:35
+msgid "See previous revision"
+msgstr "이전 리비젼 보기"
+
+#: root/base/page/addtags.tt:1
+msgid "Set a keyword for this page"
+msgstr "이 페이지의 키워드를 설정해주세요"
+
+#: root/base/page/bottomnav.tt:63
+msgid "Set language"
+msgstr "언어"
+
+#: root/base/edithelp.tt:120
+msgid "Shapes"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:43
+msgid "Show differences from previous version"
+msgstr "이전 버젼과의 차이를 보기"
+
+#: root/base/page/bottomnav.tt:46
+msgid "Show normal page"
+msgstr "일반 페이지 보기"
+
+#: root/base/gallery.tt:18
+msgid "Show picture"
+msgstr "그림 보기"
+
+#: root/base/page/info.tt:41
+msgid "Show revision"
+msgstr "리비젼 보기"
+
+#: root/base/edithelp.tt:23
+msgid "Show this product"
+msgstr ""
+
+#: root/base/page/view.tt:24
+msgid "Showing changes from previous revision."
+msgstr "이전 버젼으로부터의 변경내용 표시"
+
+#. ([pager.first, pager.last, pager.total_entries, c.wikiword( page.path, base)
+#. ([ pager.first, pager.last, pager.total_entries, c.wikiword(page.path, base) ])
+#: root/base/pager.tt:16
+msgid "Showing entries x-x of x in x"
+msgstr "「%4」의 %1-%2 페이지중 %3 페이지"
+
+#. ([pager.entries_on_this_page,pager.first,pager.last,pager.total_entries,c.wikiword(page.path,base)
+#. ([ pager.entries_on_this_page, pager.first, pager.last, pager.total_entries, c.wikiword(page.path, base) ])
+#: root/base/gallery/pager.tt:11
+msgid "Showing x (x-x) of x pictures in x"
+msgstr "Showing %1 (%2-%3) of %4 pictures in %5"
+
+#: root/base/edithelp.tt:143
+msgid "Simply indent every line of a code block by 4"
+msgstr ""
+
+#:
+msgid "Site Admins (In addition to you)"
+msgstr "사이트관리자(admin이외)"
+
+#: root/base/admin/settings.tt:5
+msgid "Site Configuration"
+msgstr "사이트 전체 설정"
+
+#:
+msgid "Site name"
+msgstr "사이트 이름"
+
+#: root/forms/admin/settings.yml:33
+msgid ""
+"Site name\n"
+"    filters:\n"
+"       - HTMLEscape\n"
+"    constraints:\n"
+"      - Required\n"
+"  - type: Text\n"
+"    name: admins\n"
+"    label_loc: Site Admins (In addition to you)\n"
+"  - type: Text\n"
+"    name: anonymous_user\n"
+"    label_loc: Anonymous User (blank to disable)\n"
+"  - type: Checkbox\n"
+"    name: open_registration\n"
+"    label_loc: New User Registration open\n"
+"    value: 1\n"
+"    default_empty_value: 0\n"
+"  - type: Checkbox\n"
+"    name: restricted_user\n"
+"    value: 1\n"
+"    default_empty_value: 0\n"
+"    label_loc: Restrict user editing to home directory\n"
+"  - type: Submit\n"
+"    name: submit\n"
+"    value_loc: Save\n"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:383
+msgid "Some fields are invalid. Please correct them and try again:"
+msgstr "몇가지 필드가 정확하지 않습니다. 수정후 다시 시도해주세요:"
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:123
+msgid "Someone else changed the page while you edited. Your changes has been merged. Please review and save again"
+msgstr "이 페이지를 수정하는 동안에 다른 누군가가 수정했습니다. 당신이 변경한 내용은 통합되었습니다. 다시 리뷰하시고 저장해주세요"
+
+#: root/base/page/bottomnav.tt:13
+msgid "Split Edit"
+msgstr ""
+
+#: root/base/edithelp.tt:122
+msgid "Square"
+msgstr ""
+
+#: root/base/navbar.tt:32 root/base/navbar.tt:34
+msgid "Sub pages"
+msgstr "관련페이지"
+
+#: root/base/navbar.tt:52 root/base/navbar.tt:54
+msgid "Subscribe to changes by RSS"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:51
+msgid "Subscribe to page changes"
+msgstr ""
+
+#: root/base/page/attachments.tt:5
+msgid "Switch to flash uploader"
+msgstr ""
+
+#: root/base/page/editbar.tt:20 root/base/page/editbar.tt:8
+msgid "Syntax"
+msgstr "구문"
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:133
+msgid "THEIR CHANGES"
+msgstr "변경"
+
+#: root/base/edithelp.tt:35
+msgid "Table"
+msgstr "테이블"
+
+#: root/base/navbar.tt:40 root/base/navbar.tt:43 root/base/navbar.tt:45 root/base/page/list.tt:6 root/base/page/recent.tt:13 root/base/tag/recent.tt:7
+msgid "Tags"
+msgstr "태그"
+
+#. (page.name)
+#: root/base/tag/cloud.tt:1
+msgid "Tags under x"
+msgstr "%1이하의 태그"
+
+#: root/base/gallery/photo_info.tt:4
+msgid "Taken"
+msgstr ""
+
+#: root/base/edithelp.tt:58
+msgid "Text Formatting"
+msgstr ""
+
+#: root/base/edithelp.tt:59 root/base/edithelp.tt:60
+msgid "Text in"
+msgstr ""
+
+#: root/base/edithelp.tt:3
+msgid "Textile formatting tips"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:299
+msgid "That mail is already in use"
+msgstr ""
+
+#: root/base/navbar.tt:68
+msgid "The Wikilicious page"
+msgstr ""
+
+#. (user.email)
+#: root/base/user/validate.tt:16
+msgid "The email was sent to x."
+msgstr "%1에게 메일을 보냈습니다."
+
+#. ($c->stash->{pre_hacked_uri})
+#: lib/MojoMojo/Controller/Root.pm:46
+msgid "The requested URL (x) was not found"
+msgstr "요청받은 URL(%1) 을 찾지 못했습니다"
+
+#: root/base/edithelp.tt:147
+msgid "This is a pre formatted code block"
+msgstr "이것은 미리 정해진 코드블록입니다"
+
+#: lib/MojoMojo/Controller/Jsrpc.pm:93
+msgid "This is the first revision! Nothing to diff against."
+msgstr "첫번째 리비젼에는 차이점이 없습니다"
+
+#: root/base/page/recent.tt:40
+msgid "Time edited"
+msgstr "편집된 시간"
+
+#: root/base/edithelp.tt:104 root/base/edithelp.tt:92
+msgid "To get"
+msgstr ""
+
+#: root/base/page/edit.tt:21
+msgid "To start editing this page, write in the text area below this preview. To find out what kind of codes you can use click the syntax link above."
+msgstr ""
+
+#: root/base/edithelp.tt:49 root/base/edithelp.tt:7
+msgid "Two or more uppercase words stuck together (camel case) or any phrase surrounded by double brackets or parenthesis is a wiki word. A camel-case wiki word can be escaped by putting \\ in front of it."
+msgstr ""
+
+#: root/base/edithelp.tt:33
+msgid "URL"
+msgstr ""
+
+#: root/base/edithelp.tt:102
+msgid "Unordered Lists with Paragraphs"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:130
+msgid "Updated preferences"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Admin.pm:95
+msgid "Updated successfully."
+msgstr "성공적으로 업데이트되었습니다"
+
+#: root/base/page/attachments.tt:11
+msgid "Upload"
+msgstr ""
+
+#: root/base/page/permissions.tt:52
+msgid "Use inherited permissions"
+msgstr ""
+
+#: root/base/navbar.tt:23
+msgid "User Preferences"
+msgstr "유저 설정"
+
+#: root/base/navbar.tt:83
+msgid "User Profile"
+msgstr "유저 프로파일"
+
+#: root/base/navbar.tt:90
+msgid "User Settings"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:360
+msgid "User not found!"
+msgstr "유저를 찾을 수 없습니다"
+
+#. ($login)
+#: lib/MojoMojo/Controller/User.pm:332
+msgid "User x not found!"
+msgstr "유저 %1 를 찾을 수 없습니다"
+
+#: root/base/user/login.tt:17 root/base/user/recover_pass.tt:10
+msgid "Username"
+msgstr "유저이름"
+
+#: root/base/admin/user.tt:5
+msgid "Users"
+msgstr "유저"
+
+#: root/base/user/validate.tt:11
+msgid "Validation"
+msgstr "확인"
+
+#: root/base/page/recent.tt:55
+msgid "View Diff"
+msgstr "차이를 보기"
+
+#: root/base/gallery.tt:23
+msgid "View as files"
+msgstr "파일 형식"
+
+#: root/base/page/attachments.tt:24
+msgid "View as gallery"
+msgstr "갤러리 형식"
+
+#: root/base/page/bottomnav.tt:50
+msgid "Views"
+msgstr "표시"
+
+#: root/base/page/list.tt:37
+msgid "Wanted Pages"
+msgstr "완전히 작성되지 않은 페이지"
+
+#: root/base/user/validate.tt:13
+msgid "We've sent you an email with an activation link. Please click on it to activate your account!"
+msgstr "인증코드를 담은 링크를 넣은 메일을 보냈습니다. 메일에 기재된 링크를 클릭해서 계정을 활성화시켜주세요"
+
+#. ($user->name)
+#: lib/MojoMojo/Controller/User.pm:279
+msgid "Welcome, x your email is validated. Please log in."
+msgstr " %1 당신의 이메일은 사용가능합니다. 로그인해주세요."
+
+#: root/base/navbar.tt:48 root/base/navbar.tt:50
+msgid "Who wrote what"
+msgstr ""
+
+#: root/base/edithelp.tt:10 root/base/edithelp.tt:47 root/base/edithelp.tt:5 root/base/edithelp.tt:52
+msgid "Wiki words"
+msgstr ""
+
+#: root/base/edithelp.tt:118
+msgid "With a second line"
+msgstr ""
+
+#: root/base/edithelp.tt:109 root/base/edithelp.tt:97
+msgid "Write"
+msgstr ""
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:134
+msgid "YOUR CHANGES"
+msgstr ""
+
+#: root/base/admin/role.tt:22
+msgid "Yes"
+msgstr ""
+
+#: root/base/export.tt:3
+msgid "You can export all the pages in this web as a zip file in either HTML (with working links and all) or the pure markup (to import in another wiki)."
+msgstr ""
+
+#: root/base/feeds.tt:3
+msgid "You can subscribe to this wiki by RSS and get either just the headlines of the pages that change or the entire page."
+msgstr "이 Wiki 의 변경사항을 RSS 경유로 구독할 수 있습니다. 편집된 페이지의 다이렉트만이 필요한 경우는 [헤드라인]을, 전체문장이 필요할 경우는 [전체문장]을 클릭해주세요."
+
+#: lib/MojoMojo/Controller/Attachment.pm:38
+msgid "You do not have permissions to edit attachments for this page"
+msgstr "이 페이지를 편집할 수 있는 권한이 없습니다."
+
+#: lib/MojoMojo/Controller/User.pm:377
+msgid "You have to fill in all required fields."
+msgstr "필수항목을 채워주세요."
+
+#: root/base/comment/login.tt:3
+msgid "You have to log in to post a comment."
+msgstr "코멘트를 쓰기위해서는 로그인해야 합니다."
+
+#: root/base/user/prefs.tt:3
+msgid "Your Account"
+msgstr "계정 정보"
+
+#: lib/MojoMojo/Controller/Jsrpc.pm:40
+msgid "Your input is invalid, please reformat it and try again."
+msgstr "잘못입력하셨습니다. 바르게 입력해주세요."
+
+#: lib/MojoMojo/Controller/User.pm:159
+msgid "Your password has been updated"
+msgstr "패스워드가 바뀌었습니다."
+
+#. (c.config.name)
+#: root/base/mail/reset_password.tt:3
+msgid "Your password on x has been reset. This is your new password:"
+msgstr "당신의 패스워드 %1 가 리셋되었습니다. 새로운 패스워드:"
+
+#. ($c->pref('name')
+#: lib/MojoMojo/Controller/User.pm:247
+msgid "[x] New User Validation"
+msgstr "[%1] New User Validation"
+
+#: root/base/page/permissions.tt:36
+msgid "actions"
+msgstr ""
+
+#: root/base/gallery/footer.tt:7
+msgid "add"
+msgstr ""
+
+#: root/base/comment.tt:23
+msgid "add a comment"
+msgstr "코멘트 등록"
+
+#: root/base/gallery/footer.tt:2
+msgid "add tag"
+msgstr "태그 등록"
+
+#: root/base/edithelp.tt:3 root/base/edithelp.tt:45
+msgid "advanced"
+msgstr ""
+
+#: root/base/edithelp.tt:67
+msgid "alt text"
+msgstr ""
+
+#: root/base/page/permissions.tt:36
+msgid "apply to subpages"
+msgstr ""
+
+#. (c.wikiword(user.link,base)
+#. (c.wikiword(user.link, base))
+#: root/base/comment/post.tt:5
+msgid "as x"
+msgstr "as %1"
+
+#: root/base/page/view.tt:5 root/base/tag/recent.tt:27
+msgid "at"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:13
+msgid "back"
+msgstr ""
+
+#: root/base/edithelp.tt:138
+msgid "blocks are wrapped in backticks"
+msgstr ""
+
+#: root/base/edithelp.tt:60 root/base/toolbar.tt:18 root/base/toolbar.tt:40
+msgid "bold"
+msgstr ""
+
+#: root/base/page/search.tt:35 root/base/page/search_inline.tt:27 root/base/page/view.tt:32 root/base/tag/recent.tt:26
+msgid "by"
+msgstr ""
+
+#: root/base/page/info.tt:31
+msgid "bytes"
+msgstr ""
+
+#: root/base/page/permissions.tt:20
+msgid "can"
+msgstr ""
+
+#: root/base/toolbar.tt:14
+msgid "centered paragraph"
+msgstr ""
+
+#: root/base/page/info.tt:16
+msgid "chars"
+msgstr ""
+
+#: root/base/edithelp.tt:138
+msgid "code"
+msgstr ""
+
+#: root/base/comment.tt:13
+msgid "comment"
+msgstr ""
+
+#: root/base/comment.tt:2
+msgid "comments disabled for preview"
+msgstr "미리보기에서는 커멘트를 표시하지 않습니다"
+
+#: root/base/tag/list.tt:32
+msgid "common uses"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:10
+msgid "configuration"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:307
+msgid "confirmation message resent"
+msgstr "최근 메시지를 확인"
+
+#:
+msgid "creator"
+msgstr "작성자"
+
+#: root/base/attachments/list.tt:9
+msgid "delete"
+msgstr "삭제"
+
+#: root/base/toolbar.tt:22 root/base/toolbar.tt:44
+msgid "deleted"
+msgstr ""
+
+#: root/base/message.tt:6
+msgid "do not pass prison, do not collect $ 200..."
+msgstr ""
+
+#: root/base/attachments/list.tt:7
+msgid "download"
+msgstr "다운로드"
+
+#: root/base/admin/user.tt:8
+msgid "email"
+msgstr "이메일"
+
+#: root/base/page/search.tt:21 root/base/page/search_inline.tt:12
+msgid "entire site"
+msgstr ""
+
+#: root/base/edithelp.tt:62 root/base/edithelp.tt:63
+msgid "example"
+msgstr ""
+
+#: root/base/comment/post.tt:6 root/base/page/edit.tt:60
+msgid "forget me"
+msgstr ""
+
+#: root/base/gallery/photo.tt:7 root/base/navbar.tt:74
+msgid "gallery"
+msgstr "갤러리 형식"
+
+#: root/base/edithelp.tt:22
+msgid "hello"
+msgstr ""
+
+#: root/base/edithelp.tt:62 root/base/edithelp.tt:63
+msgid "http://example.com/"
+msgstr ""
+
+#: root/base/edithelp.tt:140
+msgid "in the wrapping block"
+msgstr ""
+
+#: root/base/edithelp.tt:17
+msgid "include this page"
+msgstr ""
+
+#: root/base/edithelp.tt:20
+msgid "include this rss feed"
+msgstr ""
+
+#: root/base/toolbar.tt:32
+msgid "increase # for smaller headline"
+msgstr ""
+
+#:
+msgid "inline"
+msgstr "인라인으로 표시"
+
+#: root/base/attachments/list.tt:6
+msgid "inline view"
+msgstr ""
+
+#:
+msgid "insert"
+msgstr "삽입"
+
+#: root/base/attachments/list.tt:8
+msgid "insert link"
+msgstr "링크를 삽입"
+
+#: root/base/toolbar.tt:20 root/base/toolbar.tt:42
+msgid "italic"
+msgstr "이탤릭"
+
+#: root/base/edithelp.tt:59
+msgid "italics"
+msgstr "이탤릭"
+
+#: root/base/edithelp.tt:140
+msgid "just use `2`"
+msgstr ""
+
+#: root/base/toolbar.tt:16
+msgid "justified paragraph"
+msgstr ""
+
+#: root/base/toolbar.tt:10
+msgid "left justified paragraph"
+msgstr ""
+
+#: root/base/edithelp.tt:33
+msgid "linkname"
+msgstr ""
+
+#: root/base/comment/login.tt:12
+msgid "log in"
+msgstr "로그인"
+
+#: root/base/user/validate.tt:31
+msgid "log out"
+msgstr "로그아웃"
+
+#: root/base/admin/user.tt:8 root/base/comment/login.tt:8
+msgid "login"
+msgstr "로그인"
+
+#: root/base/gallery/tags.tt:2
+msgid "my tags"
+msgstr "나의 태그"
+
+#: root/base/admin/user.tt:8
+msgid "name"
+msgstr "이름"
+
+#: root/base/gallery/photo.tt:35
+msgid "no description"
+msgstr ""
+
+#: root/base/admin/user.tt:19
+msgid "no email address"
+msgstr "이메일이 없습니다"
+
+#: root/base/page/permissions.tt:20
+msgid "not access page"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:4 root/base/gallery/photo_info.tt:5 root/base/gallery/photo_info.tt:6 root/base/gallery/photo_info.tt:8
+msgid "not specified"
+msgstr ""
+
+#: root/base/page/search.tt:36 root/base/page/search_inline.tt:28
+msgid "on"
+msgstr ""
+
+#: root/base/edithelp.tt:154
+msgid "or"
+msgstr ""
+
+#: root/base/page/info.tt:25 root/base/page/info.tt:28
+msgid "pages"
+msgstr "페이지"
+
+#: root/base/comment/login.tt:10
+msgid "password"
+msgstr "패스워드"
+
+#: root/base/gallery/cloud.tt:2
+msgid "photo tags"
+msgstr ""
+
+#: root/base/page/attachments.tt:16
+msgid "plain uploader"
+msgstr "심플 다운로더"
+
+#: root/base/gallery/tags.tt:17
+msgid "popular tags"
+msgstr "인기 태그"
+
+#: root/base/comment.tt:11
+msgid "posted"
+msgstr ""
+
+#: root/base/comment.tt:9
+msgid "poster"
+msgstr ""
+
+#: root/base/user/prefs.tt:1
+msgid "preferences"
+msgstr ""
+
+#: root/base/page/permissions.tt:13 root/base/page/permissions.tt:16 root/base/page/permissions.tt:36
+msgid "read"
+msgstr "읽기"
+
+#. (wanted.from_page.path)
+#: root/base/page/list.tt:43
+msgid "referenced by x"
+msgstr "referenced by %1"
+
+#: root/base/comment/login.tt:4
+msgid "register"
+msgstr ""
+
+#: root/base/admin/role_form.tt:31
+msgid "remove"
+msgstr "삭제"
+
+#: root/base/page/bottomnav.tt:25
+msgid "revision"
+msgstr "리비젼"
+
+#: root/base/toolbar.tt:12
+msgid "right justified paragraph"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:12
+msgid "roles"
+msgstr ""
+
+#: root/base/message.tt:4
+msgid "shrinked head"
+msgstr ""
+
+#: root/base/message.tt:6
+msgid "start"
+msgstr ""
+
+#: root/base/tag/list.tt:9
+msgid "tags"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:378
+msgid "the following are missing:"
+msgstr ""
+
+#: root/base/toolbar.tt:48
+msgid "url inside paranthesis"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:11
+msgid "users"
+msgstr ""
+
+#: root/base/attachments/list.tt:5
+msgid "view"
+msgstr "보기"
+
+#. ("test")
+#: lib/MojoMojo/Schema.pm:131
+msgid "welcome message"
+msgstr ""
+"h1. MojoMojo에 오신 것을 환경합니다!\n"
+"\n"
+"이것이 보인다는 것은 무사히 MojoMojo의 인스톨이 끝났다는 것을 의미합니다.\n"
+"MojoMojo를 사용하기위해서는 우선 유저이름 「admin」 과 패스워드 「admin」 을 사용해서\n"
+"관리자로 로그인해주세요. 로그인하면 MojoMojo 의 관리가 가능해집니다.\n"
+"\n"
+"로그인을 했다면 처음으로 [[New Page]]에서 페이지를 새롭게 만들거나, 이 페이지의 위에 있는\n"
+"편집 링크에서 이 페이지를 편집할 수 있습니다.\n"
+"\n"
+"모르는 것이 있다면 [[Help]] 를 참고해주세요."
+
+#: root/base/page/permissions.tt:13 root/base/page/permissions.tt:17 root/base/page/permissions.tt:36
+msgid "write"
+msgstr "쓰기"
+
+#:
+msgid "x hits"
+msgstr "%1 hits"
+
+#. (page.content.max_version - page.content_version)
+#. (page.content.max_version - rev)
+#. (rev - 1)
+#: root/base/page/bottomnav.tt:28 root/base/page/bottomnav.tt:32 root/base/page/bottomnav.tt:35
+msgid "x more"
+msgstr "%1 more"
+
+#. (page.versions.size)
+#: root/base/page/info.tt:37
+msgid "x revisions"
+msgstr "%1 revisions"
+
+#: root/base/page/permissions.tt:13 root/base/page/permissions.tt:16 root/base/page/permissions.tt:17
+msgid "yes"
+msgstr ""
+
+#: root/base/edithelp.tt:16 root/base/edithelp.tt:19
+msgid "your text"
+msgstr ""
+
+#: root/base/edithelp.tt:17 root/base/edithelp.tt:20
+msgid "your/url"
+msgstr ""
+
+#: root/base/edithelp.tt:35
+msgid "|a|table|row|"
+msgstr ""
+
+#: root/base/edithelp.tt:35
+msgid "|b|table|row|"
+msgstr ""
@@ -6,11 +6,16 @@ use Carp qw/croak/;
 
 use parent qw/MojoMojo::Schema::Base::Result/;
 
-__PACKAGE__->load_components( "Core" );
+__PACKAGE__->load_components("Core");
 __PACKAGE__->table("page");
 __PACKAGE__->add_columns(
     "id",
-    { data_type => "INTEGER", is_nullable => 0, size => undef, is_auto_increment => 1 },
+    {
+        data_type         => "INTEGER",
+        is_nullable       => 0,
+        size              => undef,
+        is_auto_increment => 1
+    },
     "version",
     { data_type => "INTEGER", is_nullable => 1, size => undef },
     "parent",
@@ -29,20 +34,75 @@ __PACKAGE__->add_columns(
     { data_type => "INTEGER", is_nullable => 1, size => undef },
 );
 __PACKAGE__->set_primary_key("id");
-__PACKAGE__->add_unique_constraint( "page_unique_child_index", [ "parent", "name" ] );
-__PACKAGE__->has_many( "wantedpages", "MojoMojo::Schema::Result::WantedPage", { "foreign.from_page" => "self.id" } );
-__PACKAGE__->belongs_to( "parent", "MojoMojo::Schema::Result::Page", { id => "parent" } );
-__PACKAGE__->has_many( "children", "MojoMojo::Schema::Result::Page", { "foreign.parent" => "self.id" } );
-__PACKAGE__->belongs_to( "content", "MojoMojo::Schema::Result::Content", { page => "id", version => "content_version" } );
-__PACKAGE__->has_many( "versions", "MojoMojo::Schema::Result::Content", { "foreign.page" => "self.id" }, { order_by => 'version desc' } );
-__PACKAGE__->belongs_to( "page_version", "MojoMojo::Schema::Result::PageVersion", { page => "id", version => "version" } );
-__PACKAGE__->has_many( "tags",       "MojoMojo::Schema::Result::Tag",  { "foreign.page"      => "self.id" } );
-__PACKAGE__->has_many( "links_from", "MojoMojo::Schema::Result::Link", { "foreign.from_page" => "self.id" } );
-__PACKAGE__->has_many( "links_to",   "MojoMojo::Schema::Result::Link", { "foreign.to_page"   => "self.id" } );
-__PACKAGE__->has_many( "roleprivileges", "MojoMojo::Schema::Result::RolePrivilege", { "foreign.page"   => "self.id" } );
-__PACKAGE__->has_many( "attachments",    "MojoMojo::Schema::Result::Attachment",    { "foreign.page"   => "self.id" }, {order_by=>'name asc' } );
-__PACKAGE__->has_many( "comments",       "MojoMojo::Schema::Result::Comment",       { "foreign.page"   => "self.id" } );
-__PACKAGE__->has_many( "journals",       "MojoMojo::Schema::Result::Journal",       { "foreign.pageid" => "self.id" } );
+__PACKAGE__->add_unique_constraint( "page_unique_child_index",
+    [ "parent", "name" ] );
+__PACKAGE__->has_many(
+    "wantedpages",
+    "MojoMojo::Schema::Result::WantedPage",
+    { "foreign.from_page" => "self.id" }
+);
+__PACKAGE__->belongs_to(
+    "parent",
+    "MojoMojo::Schema::Result::Page",
+    { id => "parent" }
+);
+__PACKAGE__->has_many(
+    "children",
+    "MojoMojo::Schema::Result::Page",
+    { "foreign.parent" => "self.id" }
+);
+__PACKAGE__->belongs_to(
+    "content",
+    "MojoMojo::Schema::Result::Content",
+    { page => "id", version => "content_version" }
+);
+__PACKAGE__->has_many(
+    "versions",
+    "MojoMojo::Schema::Result::Content",
+    { "foreign.page" => "self.id" },
+    { order_by       => 'version desc' }
+);
+__PACKAGE__->belongs_to(
+    "page_version",
+    "MojoMojo::Schema::Result::PageVersion",
+    { page => "id", version => "version" }
+);
+__PACKAGE__->has_many(
+    "tags",
+    "MojoMojo::Schema::Result::Tag",
+    { "foreign.page" => "self.id" }
+);
+__PACKAGE__->has_many(
+    "links_from",
+    "MojoMojo::Schema::Result::Link",
+    { "foreign.from_page" => "self.id" }
+);
+__PACKAGE__->has_many(
+    "links_to",
+    "MojoMojo::Schema::Result::Link",
+    { "foreign.to_page" => "self.id" }
+);
+__PACKAGE__->has_many(
+    "roleprivileges",
+    "MojoMojo::Schema::Result::RolePrivilege",
+    { "foreign.page" => "self.id" }
+);
+__PACKAGE__->has_many(
+    "attachments",
+    "MojoMojo::Schema::Result::Attachment",
+    { "foreign.page" => "self.id" },
+    { order_by       => 'name asc' }
+);
+__PACKAGE__->has_many(
+    "comments",
+    "MojoMojo::Schema::Result::Comment",
+    { "foreign.page" => "self.id" }
+);
+__PACKAGE__->has_many(
+    "journals",
+    "MojoMojo::Schema::Result::Journal",
+    { "foreign.pageid" => "self.id" }
+);
 
 =head1 NAME
 
@@ -73,17 +133,21 @@ sub update_content {
         : undef
     );
     my %content_data =
-        map { $_ => $args{$_} } $self->result_source->related_source('content')->columns;
+      map { $_ => $args{$_} }
+      $self->result_source->related_source('content')->columns;
     my $now = DateTime->now;
-    @content_data{qw/page version status release_date/} =
-        ( $self->id, ( $content_version ? $content_version + 1 : 1 ), 'released', $now, );
+    @content_data{qw/page version status release_date/} = (
+        $self->id, ( $content_version ? $content_version + 1 : 1 ),
+        'released', $now,
+    );
     my $content =
-        $self->result_source->related_source('content')->resultset->create( \%content_data );
+      $self->result_source->related_source('content')
+      ->resultset->create( \%content_data );
     $self->content_version( $content->version );
     $self->update;
-    
+
     $self->page_version->content_version_first($content_version)
-        unless defined $self->page_version->content_version_first;
+      unless defined $self->page_version->content_version_first;
     $self->page_version->content_version_last($content_version);
     $self->page_version->update;
 
@@ -96,15 +160,18 @@ sub update_content {
     else {
         $self->result_source->resultset->set_paths($self);
     }
-    foreach my $want_me ($self->result_source->schema->resultset('WantedPage')
-                              ->search( { to_path => $self->path } ) ) {
+    foreach my $want_me ( $self->result_source->schema->resultset('WantedPage')
+        ->search( { to_path => $self->path } ) )
+    {
         my $wantme_page = $want_me->from_page;
 
         # convert the wanted into links
-        $self->result_source->schema->resultset('Link')->create({
-            from_page => $wantme_page,
-            to_page   => $self,
-        });
+        $self->result_source->schema->resultset('Link')->create(
+            {
+                from_page => $wantme_page,
+                to_page   => $self,
+            }
+        );
 
         # clear the precompiled (will be recompiled on view)
         if ( my $wantme_content = $wantme_page->content ) {
@@ -143,37 +210,46 @@ sub add_version {
     my $now = DateTime->now;
 
     my $page_version_last = $self->page_version->latest_version();
-    
+
     # clone the last version and update fields passed in %args
     my %page_version_data = map {
         exists $args{$_}
-      ? ( $_ => $args{$_} )
-      : ( $_ => $page_version_last->$_ )
+          ? ( $_ => $args{$_} )
+          : ( $_ => $page_version_last->$_ )
     } $self->result_source->related_source('page_version')->columns;
-    
-    delete $args{creator};  # creator is a field in page_version, not in page
+
+    delete $args{creator};    # creator is a field in page_version, not in page
 
     # for the new version, set the version number, status, and release date
-    @page_version_data{qw/
-          version                           status     release_date/} =
-        ( $page_version_last->version + 1, 'released', $now );
+    @page_version_data{
+        qw/
+          version                           status     release_date/
+      }
+      = ( $page_version_last->version + 1, 'released', $now );
 
     my $page_version_new;
-    # commit the new version to the database and update the previously last version to indicate its removal
-    $self->result_source->schema->txn_do(sub {
-    
-        $page_version_new = 
-            $self->result_source->related_source('page_version')->resultset->create( \%page_version_data );
-        
-        $page_version_last->update({
-            remove_date => $now,
-            status => 'removed',
-            comments => 'Replaced by version ' . $page_version_data{version}
-        });
-        
-        $self->update(\%args);
-    });
-    
+
+# commit the new version to the database and update the previously last version to indicate its removal
+    $self->result_source->schema->txn_do(
+        sub {
+
+            $page_version_new =
+              $self->result_source->related_source('page_version')
+              ->resultset->create( \%page_version_data );
+
+            $page_version_last->update(
+                {
+                    remove_date => $now,
+                    status      => 'removed',
+                    comments    => 'Replaced by version '
+                      . $page_version_data{version}
+                }
+            );
+
+            $self->update( \%args );
+        }
+    );
+
     return $page_version_new;
 }
 
@@ -191,7 +267,8 @@ sub tagged_descendants {
             'tag'         => $tag,
             -or           => [
                 'me.id' => \'=ancestor.id',
-                -and    => [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
+                -and =>
+                  [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
             ],
 
             'me.id'           => \'=tag.page',
@@ -222,13 +299,21 @@ sub tagged_descendants_by_date {
             'tag'         => $tag,
             -or           => [
                 'me.id' => \'=ancestor.id',
-                -and    => [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
+                -and =>
+                  [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
             ],
             'me.id'           => \'=tag.page',
             'content.page'    => \'=me.id',
             'content.version' => \'=me.content_version',
         },
         {
+            columns => [
+                'me.id',              'me.version',
+                'me.parent',          'me.name',
+                'me.name_orig',       'me.depth',
+                'me.lft',             'me.rgt',
+                'me.content_version', 'content.created'
+            ],
             distinct => 1,
             from     => "page as me, page as ancestor, tag, content",
             order_by => 'content.created DESC',
@@ -237,8 +322,6 @@ sub tagged_descendants_by_date {
     return $self->result_source->resultset->set_paths(@pages);
 }
 
-
-
 =head2 descendants
 
   @descendants = $page->descendants( [$resultset_page] );
@@ -252,8 +335,8 @@ L<resultset|DBIx::Class::ResultSet>.
 =cut
 
 sub descendants {
-    my ($self, $resultset_page)  = @_;
-    
+    my ( $self, $resultset_page ) = @_;
+
     my $rs = $self->result_source->resultset->search(
         {
             'ancestor.id' => $self->id,
@@ -266,18 +349,18 @@ sub descendants {
             ],
         },
         {
-            $resultset_page? (page => $resultset_page || 1, rows => 20) : (),
+            $resultset_page ? ( page => $resultset_page || 1, rows => 20 ) : (),
             from     => 'page me, page ancestor',
             order_by => ['me.name']
         }
-    );  # an empty arrayref if there are no results because we'll dereference in the 'return'
+      )
+      ; # an empty arrayref if there are no results because we'll dereference in the 'return'
 
-    return wantarray?
-        $self->result_source->resultset->set_paths($rs->all)
-      : $rs
+    return wantarray
+      ? $self->result_source->resultset->set_paths( $rs->all )
+      : $rs;
 }
 
-
 =head2 descendants_by_date
 
   @descendants = $page->descendants_by_date;
@@ -312,7 +395,6 @@ sub descendants_by_date {
     return $self->result_source->resultset->set_paths(@pages);
 }
 
-
 =head2 user_tags($user)
 
 Return popular tags for this page used C<$user>.
@@ -321,18 +403,19 @@ Return popular tags for this page used C<$user>.
 
 sub user_tags {
     my ( $self, $user ) = @_;
-    my (@tags) = $self->result_source->related_source('tags')->resultset->search(
+    my (@tags) =
+      $self->result_source->related_source('tags')->resultset->search(
         {
             page   => $self->id,
             person => $user,
         },
         {
-            select   => [ 'me.id', 'me.tag', 'count(me.tag) as refcount' ],
-            as       => [ 'id',    'tag',    'refcount' ],
+            select   => [ 'me.tag', 'count(me.tag) as refcount' ],
+            as       => [ 'tag',    'refcount' ],
             order_by => ['refcount'],
-            group_by => [ 'me.id','me.tag'],
+            group_by => ['me.tag'],
         }
-    );
+      );
     return @tags;
 }
 
@@ -344,18 +427,19 @@ Return popular tags for this page used by other people than C<$user>.
 
 sub others_tags {
     my ( $self, $user ) = @_;
-    my (@tags) = $self->result_source->related_source('tags')->resultset->search(
+    my (@tags) =
+      $self->result_source->related_source('tags')->resultset->search(
         {
             page   => $self->id,
             person => { '!=', $user }
         },
         {
-            select   => [ 'me.id', 'me.tag', 'count(me.tag) as refcount' ],
-            as       => [ 'id',    'tag',    'refcount' ],
+            select   => [ 'me.tag', 'count(me.tag) as refcount' ],
+            as       => [ 'tag',    'refcount' ],
             order_by => ['refcount'],
-            group_by => ['me.tag','me.id'],
+            group_by => ['me.tag'],
         }
-    );
+      );
     return @tags;
 }
 
@@ -367,15 +451,16 @@ Return an array of {id, tag, refcount} for the C<$user>'s tags.
 
 sub tags_with_counts {
     my ( $self, $user ) = @_;
-    my (@tags) = $self->result_source->related_source('tags')->resultset->search(
+    my (@tags) =
+      $self->result_source->related_source('tags')->resultset->search(
         { page => $self->id, },
         {
-            select   => [ 'me.id', 'me.tag', 'count(me.tag) as refcount' ],
-            as       => [ 'id',    'tag',    'refcount' ],
+            select   => [ 'me.tag', 'count(me.tag) as refcount' ],
+            as       => [ 'tag',    'refcount' ],
             order_by => ['refcount'],
-            group_by => [ 'me.id', 'me.tag'],
+            group_by => ['me.tag'],
         }
-    );
+      );
     return @tags;
 }
 
@@ -408,10 +493,9 @@ Return the number of photos attached to this page. Use for galleries.
 
 sub has_photos {
     my $self = shift;
-    return $self->result_source->schema->resultset('Photo')->search(
-        { 'attachment.page' => $self->id },
-        { join => [qw/attachment/] }
-    )->count;
+    return $self->result_source->schema->resultset('Photo')
+      ->search( { 'attachment.page' => $self->id },
+        { join => [qw/attachment/] } )->count;
 }
 
 =head1 AUTHOR
@@ -30,7 +30,7 @@ use Module::Pluggable::Ordered
     except      => qr/^MojoMojo::Plugin::/,
     require     => 1;
 
-our $VERSION = '1.02';
+our $VERSION = '1.03';
 use 5.008004;
 
 MojoMojo->config->{authentication}{dbic} = {
@@ -0,0 +1,85 @@
+#!/usr/bin/env perl
+=head1 NAME
+
+bust_cache.pl - Delete the precompiled content of a page. MojoMojo
+will recompile the page next time it is requested.
+
+=head1 SYNOPSIS
+
+    script/util/bust_cache.pl /path/to/page
+
+=head1 AUTHORS
+
+Dan Dascalescu (dandv), http://dandascalescu.com
+
+=head1 LICENSE
+
+You may distribute this code under the same terms as Perl itself.
+
+=head1 COPYRIGHT
+
+Copyright (C) 2010, Dan Dascalescu.
+
+=cut
+
+use strict;
+use warnings;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+use MojoMojo::Schema;
+
+my ($page_path, $filename_content, $dsn, $user, $pass) = @ARGV;
+
+if (!$page_path) {
+    die "USAGE: $0 /path/to/page [dsn user pass]
+Delete the precompiled content of a page. MojoMojo
+will recompile the page next time it is requested.
+\n";
+}
+
+if (!$dsn) {
+    # no DSN passed via the command line; attempting to read one from the config file
+    require Config::JFDI;
+    
+    my $config = Config::JFDI->new(name => "MojoMojo")->get;
+    die "Couldn't read config file" if not keys %{$config};
+    
+    eval {
+        if (ref $config->{'Model::DBIC'}->{'connect_info'} eq 'HASH') {
+            $dsn  = $config->{'Model::DBIC'}->{'connect_info'}->{dsn};
+            $user = $config->{'Model::DBIC'}->{'connect_info'}->{user};
+            $pass = $config->{'Model::DBIC'}->{'connect_info'}->{password};
+        } else {
+            ($dsn, $user, $pass) = @{$config->{'Model::DBIC'}->{connect_info}};
+        }
+    };
+    die "Your DSN settings in mojomojo.conf seem invalid: $@\n" if $@;
+}    
+die "Couldn't find a valid Data Source Name (DSN).\n" if !$dsn;
+
+$dsn =~ s/__HOME__/$FindBin::Bin\/\.\./g;
+
+my $schema = MojoMojo::Schema->connect($dsn, $user, $pass) or
+  die "Failed to connect to database";
+
+my ( $path_pages, $proto_pages ) = $schema->resultset('Page')->path_pages( $page_path )
+    or die "Can't find page $page_path\n";
+
+if (scalar @$proto_pages) {
+    die "One or more pages at the end do(es) not exist: ",
+        (join ", ", map { $_->{name_orig} } @$proto_pages),
+        "\n";
+}
+
+# Get the lastest content version of the page
+my $page = $path_pages->[-1];
+my $page_content = $schema->resultset('Content')->single(
+    {
+        page    => $page->id,
+        version => $page->content_version,
+    }
+);
+
+$page_content->update({
+    precompiled => ''
+});
@@ -30,7 +30,7 @@ use MojoMojo::Schema;
 my ($page_path, $filename_content, $dsn, $user, $pass) = @ARGV;
 
 if (!$page_path) {
-    die "USAGE: $0 /path/to/page
+    die "USAGE: $0 /path/to/page [dsn user pass]
 Dump the raw (markup) contents of the last version of a page.
 \n";
 }
@@ -43,7 +43,7 @@ if (!$dsn) {
     die "Couldn't read config file" if not keys %{$config};
     
     eval {
-        if (ref $config->{'Model::DBIC'}->{'connect_info'}) {
+        if (ref $config->{'Model::DBIC'}->{'connect_info'} eq 'HASH') {
             $dsn  = $config->{'Model::DBIC'}->{'connect_info'}->{dsn};
             $user = $config->{'Model::DBIC'}->{'connect_info'}->{user};
             $pass = $config->{'Model::DBIC'}->{'connect_info'}->{password};
@@ -51,7 +51,7 @@ if (!$dsn) {
             ($dsn, $user, $pass) = @{$config->{'Model::DBIC'}->{connect_info}};
         }
     };
-    die "Your DSN settings in mojomojo.conf seem invalid\n" if $@;
+    die "Your DSN settings in mojomojo.conf seem invalid: $@\n" if $@;
 }    
 die "Couldn't find a valid Data Source Name (DSN).\n" if !$dsn;
 
@@ -76,7 +76,7 @@ my ($page_path, $filename_content, $dsn, $user, $pass) = @ARGV;
 
 if (!$page_path) {
     die "USAGE: $0 /path/to/page filename [dsn user pass]
-Replace the contents of the last version of a page with the content from a file
+Replace the contents of the last version of a page with the content from a file.
 \n";
 }
 
@@ -88,7 +88,7 @@ if (!$dsn) {
     die "Couldn't read config file" if not keys %{$config};
     
     eval {
-        if (ref $config->{'Model::DBIC'}->{'connect_info'}) {
+        if (ref $config->{'Model::DBIC'}->{'connect_info'} eq 'HASH') {
             $dsn  = $config->{'Model::DBIC'}->{'connect_info'}->{dsn};
             $user = $config->{'Model::DBIC'}->{'connect_info'}->{user};
             $pass = $config->{'Model::DBIC'}->{'connect_info'}->{password};
@@ -96,7 +96,7 @@ if (!$dsn) {
             ($dsn, $user, $pass) = @{$config->{'Model::DBIC'}->{connect_info}};
         }
     };
-    die "Your DSN settings in mojomojo.conf seem invalid\n" if $@;
+    die "Your DSN settings in mojomojo.conf seem invalid: $@\n" if $@;
 }    
 die "Couldn't find a valid Data Source Name (DSN).\n" if !$dsn;
 
@@ -0,0 +1,64 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 7;
+use lib 't/lib';
+use FakeCatalystObject;
+
+BEGIN {
+    use_ok 'MojoMojo::Formatter::IDLink';
+    use_ok 'Catalyst::Test', 'MojoMojo';
+}
+
+my $fake_c;
+( undef, $fake_c ) = ctx_request('/');
+
+{
+    my $content = 'ask {{id bayashi}}';
+    MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+    is(
+        $content,
+        qq|ask <a href="http://twitter.com/bayashi">bayashi</a>\n|,
+        'default',
+    );
+}
+
+{
+    my $content = 'ask {{id:htb bayashi_net}}';
+    MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+    is(
+        $content,
+        qq|ask <a href="http://b.hatena.ne.jp/bayashi_net">bayashi_net</a>\n|,
+        'htb',
+    );
+}
+
+{
+    my $content = 'ask {{id:htd bayashi_net}}';
+    MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+    is(
+        $content,
+        qq|ask <a href="http://d.hatena.ne.jp/bayashi_net">bayashi_net</a>\n|,
+        'htd',
+    );
+}
+
+{
+    my $content = 'ask {{id:cpan bayashi}}';
+    MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+    is(
+        $content,
+        qq|ask <a href="http://search.cpan.org/~bayashi/">bayashi</a>\n|,
+        'cpan',
+    );
+}
+
+{
+    my $content = 'ask {{id:fb dai.okabayashi}}';
+    MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+    is(
+        $content,
+        qq|ask <a href="http://facebook.com/dai.okabayashi">dai.okabayashi</a>\n|,
+        'facebook',
+    );
+}